package jihyun51.swing;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;

import jihyun51.dao.MemberDAO;
import jihyun51.model.MemberVO;

public class ManagerMember extends JDialog {
private MemberDAO mdao=new MemberDAO();

	private final JPanel contentPanel = new JPanel();
	private JTable table;
	DefaultTableModel model=new DefaultTableModel();

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		try {
			ManagerMember dialog = new ManagerMember();
			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			dialog.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the dialog.
	 */
	public ManagerMember() {
		setBounds(100, 100, 640, 480);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(new BorderLayout(0, 0));
		{
			JPanel listPane = new JPanel();
			listPane.setPreferredSize(new Dimension(640, 365));
			contentPanel.add(listPane, BorderLayout.NORTH);
			{
				JScrollPane scrollPane = new JScrollPane();
				scrollPane.setPreferredSize(new Dimension(610, 360));
				listPane.add(scrollPane);
				{
					//JTable에 출력할 데이터를 ArrayList로 작성
					ArrayList<MemberVO> list = mdao.selectMember();
					//JTable에 데이터를 표시하기 위해 DefaultTableModel 객체생성
				
					model = new DefaultTableModel(){
					//더블클릭시 열 수정이 되지 못하게 재설정
						public boolean isCellEditable(int row, int column) {
							return false; // 모든 열 수정 불가
						}
					};
					
					//JTable의 제목행 설정
					model.setColumnIdentifiers(
							new String[] {"회원번호", "아이디", "이름", "등록일"}
							);
					
					//JTable의 본문행 생성
					for(MemberVO m : list) {
						model.addRow(
								new String[] {m.getMno(),m.getUid(),m.getName(), m.getRegdate()}
								);
						// DefaultTableModel객체에 addRow 메서드를 이용해서 JTable에 출력할 데이터를 추가한다.	
					}
					
					table = new JTable();
					table.addMouseListener(new MouseAdapter() {
						@Override
						public void mouseClicked(MouseEvent e) {
							JTable t=(JTable)e.getSource();
							if(e.getClickCount()==2){
								//회원 상세정보 출력
								
							}
						}
					});
					
					//DefaultTableModel 객체를 JTable에 적용
					table.setModel(model);
					
					table.setPreferredSize(new Dimension(610, 360));
					scrollPane.setViewportView(table);
				}
			}
		}
		{
			JPanel panel = new JPanel();
			panel.setPreferredSize(new Dimension(640, 40));
			contentPanel.add(panel, BorderLayout.CENTER);
			{
				JButton addbtn = new JButton(" 회원추가 ");
				panel.add(addbtn);
			}
			{
				JButton modbtn = new JButton(" 회원수정 ");
				modbtn.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						int r=table.getSelectedRow(); // 선택행 조사
						String mno=table.getValueAt(r,0).toString(); 
						if(r !=-1){
							UpdateMember upm = new  UpdateMember(mno,r,table);
							//회원정보 수정 패널객체를 생성
							//단, UpdateMember의 생성자에 수정할 회원 번호를 매개변수로 전달
							//또한 회원정보 수정후 JTable의 model도 변경해야 하므로 model객체도 매개변수로 전달.
							upm.setVisible(true);
							//패널을 화면에 표시
						}
					}
				});
				panel.add(modbtn);
			}
			{
				JButton delbtn = new JButton(" 회원삭제 ");
				//내용을 삭제할때는 데이터베이스의 내용을 먼저 지우고 행의 내용을 지운다.
				delbtn.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						int choice=JOptionPane.showConfirmDialog(null, "정말로 삭제 하시겠습니까?");
						if (choice==JOptionPane.OK_OPTION){
							
							// ********************
							//선택한 행의 위치를 알아냄
							int r = table.getSelectedRow(); // 행 몇번째 행에서 더블클릭했는지의 값을 r에 저장함
							if(r==-1){ //삭제할 행을 선택했을때는 r에 0의 값이 되고 선택하지 않으면 -1의 값이 된다.
								JOptionPane.showMessageDialog(null, "삭제할 열을 선택하세요.");
								return; //코드의 실행을 중지시킨다.
							}
							String mno = table.getValueAt(r, 0).toString();
							JOptionPane.showMessageDialog(null, mno);
							//*********************
							
							//선택한 행의 첫번째 열 값을 알아냄
							if (mdao.deleteMember(mno)>0) {
								JOptionPane.showMessageDialog(null, "성공적으로 삭제되었습니다.");
								
								//JTable의 행도 삭제
								model.removeRow(r);
								//삭제한 행을 JTable 반영해서 다시 출력
								table.repaint();
							}
							
						}
					}
				});
				panel.add(delbtn);
			}
		}
		{
			JPanel btnPane = new JPanel();
			btnPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
			getContentPane().add(btnPane, BorderLayout.SOUTH);
			{
				JButton okButton = new JButton("OK");
				okButton.setActionCommand("OK");
				btnPane.add(okButton);
				getRootPane().setDefaultButton(okButton);
			}
			{
				JButton cancelButton = new JButton("Cancel");
				cancelButton.setActionCommand("Cancel");
				btnPane.add(cancelButton);
			}
		}
	}

}
